package com.hoshiicloud.goods.service;

import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.hoshiicloud.common.query.OmnipotentParam;
import com.hoshiicloud.common.query.OmnipotentWrapper;
import com.hoshiicloud.common.update.UpdateBatchParam;
import com.hoshiicloud.goods.entity.spu.ExtSpu;

import java.util.List;
import java.util.Map;

/**
 * <p>
 * 扩展SPU 服务类
 * </p>
 *
 * @author zhangshuhu
 * @since 2019-06-04
 */
public interface ExtSpuService extends IService<ExtSpu> {

    ExtSpu getById(Long id);

    boolean save(ExtSpu entity);

    boolean updateById(ExtSpu entity);

    IPage getPage(IPage page, Wrapper queryWrapper, String key);

    boolean deleteById(Long id);

    List<ExtSpu> getByIds(List<Long> ids, String key);

    ExtSpu saveExtSpu(ExtSpu entity);

    /**
     * 获取SPU信息加上最低售价（最低售价从sku表获取，如果一个spu对应多个sku，获取最低售价）
     *
     * @return Page<Map < String, Object>>
     */
    IPage getSpusWithMiniPrice(Page page, Wrapper queryWrapper, String key);

    /**
     * 获取SPU商品详情加上类目和标签信息以及最低价（最低售价从sku表获取，如果一个spu对应多个sku，获取最低售价。
     * 类目从spu_sales_category表获取关联goods_category表，标签从ext_spu_tags表获取）
     *
     * @return Map<String, Object>
     */
    List<Map<String, Object>> getSpuDetailWithOthers(String key);
    /**
     * 根据店铺和经营类目获取SPU信息加上最低售价（最低售价从sku表获取，如果一个spu对应多个sku，获取最低售价）
     * @param page 分页对象
     * @param entityWrapper 查询参数
     * @return Page<Map<String,Object>>
     */
    Page<Map<String,Object>> getSpusByStoreIdAndCategoryId(Page page, Wrapper<ExtSpu> entityWrapper, String key);


    /**
     * 分页查询商品列表
     */
    Page listExtSpuDisplays(Map<String, Object> map);

    /**
     *  ExtSpu 商品上下架
     */
    Boolean extSpuShelvesUpAndDown(Long extId, Map<String, Long> userMessage, Integer status);

    /**
     * 批量删除
     */
    Boolean delectByIds(List<Long> ids, Map<String, Object> map);

    List<ExtSpu> listByStoreId(Long storeId);

    Map<String,String> queryStoresAndBaseSpuIds(List<Long> storeIds, String join);

    Boolean saveBatch1(List<ExtSpu> list);

    /**
     * 根据自定义条件进行批量更新
     */
    boolean updateBatchByWrapper(UpdateBatchParam<ExtSpu> updateBatchParam);

    List<ExtSpu> omnipotentQuery(List<OmnipotentWrapper> wrappers);

    /**
     * 根据扩展SPU主键查找同一类扩展SPU
     * @param id 扩展spu主键id
     * @return List<ExtSpu>
     */
    List<ExtSpu> getSimilarExtSpuById(Long id);

    /**
     * 获取最大权重值
     */
    Long getMaxWeight(Long storeId);

    /**
     * 权重更新
     */
    Boolean updateWeight(Map<String, Object> weightMap);

    /**
     * 通用的更新操作
     */
    boolean updateBatch(OmnipotentParam<ExtSpu> param);

}
